/****************************************************************************
 *  Copyright (C) 2018 RoboMaster.
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program. If not, see <http://www.gnu.org/licenses/>.
 ***************************************************************************/

#ifndef __SYS_H__
#define __SYS_H__

#include "stm32f4xx_hal.h"

#define CAMERA_ON_GIMBAL

//select your infantry number
#define INFANTRY_NUM INFANTRY_1

/*************************infantry number*******************************/
#define INFANTRY_1  1
#define INFANTRY_2  2
#define INFANTRY_3  3
#define INFANTRY_4  4
#define INFANTRY_5  5
#define INFANTRY_6  6

/**********************遥控 设置配置***************************/
/* normalized remote controller proportion */
#define RC_RESOLUTION     660.0f

/*************************底盘 配置*******************************/
/* 遥控模式  底盘 速度 限制 */
/* 前后 速度 (mm/s) */
#define CHASSIS_RC_MAX_SPEED_X  500.0f//3300.0f
#define CHASSIS_RC_MOVE_RATIO_X 1.0f
/* 左右 速度 (mm/s) */
#define CHASSIS_RC_MAX_SPEED_Y  500.0f
#define CHASSIS_RC_MOVE_RATIO_Y 1.0f
/* 底盘 旋转 速度 (deg/s) */
/* used only chassis open loop mode */
#define CHASSIS_RC_MAX_SPEED_R  300.0f
#define CHASSIS_RC_MOVE_RATIO_R 1.0f

/* 键盘模式  底盘 速度 限制 */
/* 左右 速度 (mm/s) */
#define CHASSIS_KB_MAX_SPEED_X  3300.0f 
#define CHASSIS_KB_MOVE_RATIO_X 1.0f
/* 前后 速度 (mm/s) */
#define CHASSIS_KB_MAX_SPEED_Y  3300.0f
#define CHASSIS_KB_MOVE_RATIO_Y 1.0f

/**************************云台 配置*******************************/
/* 遥控模式 云台速度控制 */
/* pitch 轴 速度 */
#define GIMBAL_RC_MOVE_RATIO_PIT -1.0f
/* yaw 轴 速度 */
#define GIMBAL_RC_MOVE_RATIO_YAW 1.0f

/* 遥控模式 云台速度控制 */
/* pitch 轴 速度 */
#define GIMBAL_PC_MOVE_RATIO_PIT 1.0f
/* yaw 轴 速度 */
#define GIMBAL_PC_MOVE_RATIO_YAW 1.0f

#define FUZZY_PITCH_SPD_MAXOUT   7000
#define FUZZY_YAW_SPD_MAXOUT     7000

/**************************射击 配置********************************/
/* 射速 */
#define DEFAULT_FRIC_WHEEL_SPEED 2000 //maximum value is 2500
/* 拨盘电机单发 */
#define TRIGGER_MOTOR_SPEED      1500 //1500
/* 拨盘电机连发 */
#define C_TRIGGER_MOTOR_SPEED    600	//600


/************************ 底盘硬件 配置 ****************************/
/* 麦轮半径(mm) */
#define RADIUS                 76
/* 麦轮周长(mm) */
#define PERIMETER              478

/*轮距（左右）*/
#define WHEELTRACK             440//415
/*轴距（前后）*/
#define WHEELBASE              340//406

/*云台偏移底盘中心X轴（前后）距离*/
#define GIMBAL_X_OFFSET        6//130
/*云台偏移底盘中心Y轴（左右）距离*/
#define GIMBAL_Y_OFFSET        -6//0

/* 底盘电机 3508 */
/* 底盘电机的减速比 */
#define CHASSIS_DECELE_RATIO (1.0f/19.0f)
/* 单一 3508 电机的 最大 转速, unit is rpm */
#define MAX_WHEEL_RPM        8500  //8347rpm = 3500mm/s
/* 底盘 最大 平移速度 , unit is mm/s */
#define MAX_CHASSIS_VX_SPEED 3300  //8000rpm
#define MAX_CHASSIS_VY_SPEED 3300
/* 底盘 最大 旋转速度 , unit is degree/s */
#define MAX_CHASSIS_VR_SPEED 360   //5000rpm

/************************** 云台硬件 配置 *****************************/
/* 电机编码值 和 角度（度） 的比率 */
#define ENCODER_ANGLE_RATIO    (8192.0f/360.0f)
/* pitch轴 电机 的 减速比 */
#define PIT_DECELE_RATIO       1.0f
/* yaw轴 电机 的 减速比 */
#define YAW_DECELE_RATIO       1.0f
/* pitch轴 正方向参数 */
#define PIT_MOTO_POSITIVE_DIR  -1.0f
/* yaw轴 正方向参数 */
#define YAW_MOTO_POSITIVE_DIR  1.0f
/* 拨盘 电机正方向参数 */
#define TRI_MOTO_POSITIVE_DIR  1.0f




/*********************** 系统 交互接口 配置 ****************************/

/* 自动控制 宏定义 */
#define AUTO_NAVIGATION

/* CAN 相关 */
#define CHASSIS_CAN          hcan1
#define ZGYRO_CAN            hcan2
#define CHASSIS_ZGYRO_CAN    hcan1
#define GIMBAL_CAN           hcan1
#define TRIGGER_CAN          hcan1
#define UPDOWN_ISLAND_CAN    hcan2

#define MCU_COMMUNICATE_CAN  hcan2
#define FUNCTION_MODE_CAN1   hcan1
/* UART 相关 */
/**
  * @attention
  * close usart DMA receive interrupt, so need add 
  * uart_receive_handler() before HAL_UART_IROHandler() in uart interrupt function
*/
#define DBUS_HUART         huart1 //遥控接收器
#define JUDGE_HUART        huart3 //裁判系统接口
#define COMPUTER_HUART     huart7 //MINI电脑接口
#define remote_control     huart6
#define HMI_LIQUID_CRYSTAL   huart8   //液晶屏

/* 云台 相关 */
#define PIT_ANGLE_MAX      14
#define PIT_ANGLE_MIN      -14
#define YAW_ANGLE_MAX      50
#define YAW_ANGLE_MIN      -50

/* 监测任务 相关 */
#define DEFAULT_TUNE       300	//音调

/* IMU 温度控制 */
#define DEFAULT_IMU_TEMP   50

/* 计算 相关 */
/* 弧度 系数 */
#define RADIAN_COEF        57.3f
/* 圆周率 */
#define PI                 3.142f

//判断最大最小值
#define VAL_LIMIT(val, min, max) \
do {\
if((val) <= (min))\
{\
  (val) = (min);\
}\
else if((val) >= (max))\
{\
  (val) = (max);\
}\
} while(0)\

#endif
